package com.summer.study.leetcode.tree;

import com.summer.study.leetcode.tree.enums.DfsSearchType;

import java.util.List;

/**
 * @auther: 杨杰
 * @date: 2019/7/29 15:26
 * @description:
 */
public interface Tree<E>{

    void init(Node<E> root);

    boolean insert(Node<E> node,Node<E> parent);

    Node<E> getRoot();

    boolean setRoot(Node<E> node);

    long size();

    boolean isEmpty();

    boolean isLeaf(Node<E> node);

    long depth(boolean isMax);

    List<Node<E>>  inOrder();

    List<Node<E>> preOrder();

    List<Node<E>> afterOrder();

    //广度优先  参考文档 https://blog.csdn.net/weixin_39912556/article/details/82852749

    List<Node<E>> bfs();

    //深度优先

    List<Node<E>> dfs(DfsSearchType type);

    // 层次遍历

    List<List<E>> levelOrder();

    //是否对称的

    boolean isSymmetric();

/*
    int size();

    boolean isEmpty();

    void insert(Tree tree);


    void inset(int e);

    int getHeight();

    void dfs();

    int getHeight();

    void preTraversal();

    void middleTraversal();

    void postTraversal();

    //借助队列实现层次遍历

    void orderByQueue();

    //借助栈实现非递归遍历二叉树,使用先序进行遍历

    void preTraByStack();

    //借助栈实现非递归遍历二叉树,使用中序进行遍历

    void inOrderByStack();

    //借助栈实现非递归遍历二叉树,使用后序进行遍历

    void postTraByStack();*/

}
